# -*- coding: utf-8 -*-
import numpy as np

a = np.arange(12).reshape(3,4)

#改变大小
print a.ravel() #展平为1维数组
a.shape = (4,3) #元素在内存中的位置并没有改变
print a
print a.reshape(6,-1) #a不动,返回改变形状后的数组,-1对应的维自动计算。同上
a.resize((4,3)) #同上
print a
print a.T
a = np.arange(24).reshape(2,3,4)
print(a.transpose(2,0,1).shape) #改变维度顺序
print(a[:,:,np.newaxis,:].shape)


print '-'*80


#组合
b = np.zeros_like(a)
print(np.concatenate((a,b,a),axis=0)) #axis相加，其余维度相同不变
print(np.concatenate((a,b),axis=1))
print(np.stack((a,b),axis=1).shape) #所有维度相同，增加新的axis，axis之后的维度顺延
#类似还有vstack,hstack, r_, c_

#分割
print np.hsplit(a,3)


print '-'*80


#复制
c = a #c跟a完全相同
print c is a
c = a.view() #c跟a虽是不同数组,但c跟a公用数据.
c = a.copy() #深拷贝,c跟a完全不同
print a.repeat(3,axis=0)

a = np.array([1,2,3,4,5])
b = np.array([2,4,7])
ax,bx = np.ix_(a,b)
print ax.shape,bx.shape
print ax*bx


print '-'*80


#产生能快速广播的数组
x,y = np.ogrid[:1:4j, :1:3j] #和arange类似,三个参数是开始值,结束值,步长,步长为虚数表示长度
print x
print y
print 2*x + y
x,y = np.mgrid[:1:4j, :1:3j] #与ogrid不同的是,它返回的是广播后的数组
print x
print y
